home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -seriously_amiga- / shareware / programming / other / kaliosisquantrum / morb / playfield.i < prev    next >
Text File  |  1998-01-12  |  7KB  |  170 lines

  1. *
  2. * CdBSian Obviously Universal & Interactive Nonsense (COUIN)
  3. * (Absurdité CdBSienne Manifestement Universelle et Interactive)
  4. * ©1997-1998, CdBS Software (MORB)
  5. * Equates & structures for playfield stuff
  6. * $Id: Playfield.i 0.7 1997/09/09 00:11:15 MORB Exp MORB $
  7. *
  8.  
  9. NbPlanes           = 4
  10.  
  11. TileWidth          = 1       ; Width of a tile in words
  12. TileHeight         = 16      ; Height of a tile
  13. TileSizeSh         = 7       ; log2(TileWidth*2*TileHeight*NbPlanes)
  14. NbHorTile          = BufferWidth/(TileWidth*2)
  15. NbVerTile          = BufferHeight/TileHeight
  16.  
  17. MaxMapWidth        = 4096    ; Max. width of map in words
  18.  
  19. HMargin            = 4       ; Num. extra colmuns of tiles
  20. VMargin            = 4       ; Num. extra rows of tiles
  21.  
  22. LineSize           = BufferWidth*NbPlanes
  23. BufferWidth        = 40+(TileWidth*HMargin*2)
  24. BufferHeight       = 256+(TileHeight*VMargin)
  25. BufBpSize          = BufferWidth*BufferHeight+MaxMapWidth*2
  26. BufferSize         = BufBpSize*NbPlanes
  27.  
  28. DataFetchWidth     = 44
  29. Modulo             = BufferWidth*NbPlanes-DataFetchWidth
  30.  
  31. RMapSize           = NbHorTile*NbVerTile*2
  32. RTblSize           = NbHorTile*NbVerTile*12+4
  33.  
  34. **** La structure playfield permet de définir une zone qui scrolle avec
  35. **** des blocs, et sur laquelle se trouvent des sprites
  36. **** (une pour chaque plan de scroll)
  37.  
  38.          rsreset
  39. Playfield          rs.b      0
  40. pf_TilesBank       rs.l      1         ; Pointeur sur les données gfx des
  41.                                        ; blocs
  42. pf_Sprites         rs.l      1         ; Pointeur sur une structure
  43.                                        ; spritesheader (une seule pour
  44.                                        ; le moment)
  45. pf_Map             rs.l      1         ; Pointeur sur la map
  46. pf_OMapAddr        rs.l      1
  47. pf_CMapAddr        rs.l      1         ; Adresse de la position courante
  48.                                        ; du coin supérieur gauche de la map
  49. pf_Width           rs.l      1         ; Largeur de la map
  50. pf_Height          rs.l      1         ; Hauteur de la map
  51. pf_MaxX            rs.l      1
  52. pf_MaxY            rs.l      1
  53. pf_X               rs.l      1         ; Position du coin supérieur gauche
  54. pf_Y               rs.l      1         ; de l'écran par rapport à la map
  55.                                        ; (en pixels SHires)
  56. pf_iX              rs.l      1
  57. pf_iY              rs.l      1
  58. pf_LastX           rs.l      1         ; Position
  59. pf_LastY           rs.l      1         ; précédente
  60. pf_DeltaX          rs.l      1
  61. pf_DeltaY          rs.l      1
  62.  
  63. pf_X16             rs.l      1         ; Position/16 de la map
  64. pf_Y16             rs.l      1         ;
  65. pf_BufY16          rs.l      1         ; Position de départ verticale du
  66.                                        ; buffer bitmap en nombre de tiles
  67.  
  68. pf_WrapPos         rs.l      1         ; Ordonnée du wrap par rapport au
  69.                                        ; haut de l'écran
  70.  
  71. pf_BpPtrs          rs.l      1         ; Adresse dans la copperliste des
  72.                                        ; pointeurs bitplanes
  73. pf_BpWPtrs         rs.l      1         ; Idem wrap
  74. pf_WPosPtr         rs.l      1         ; Idem position du wrap
  75.  
  76. pf_BitmapOffset    rs.l      1
  77. pf_VBitmapOffset   rs.l      1
  78. pf_WBitmapOffset   rs.l      1
  79. pf_MaxBmOffset     rs.l      1
  80.  
  81. pf_WorkOfst        rs.l      1         ; Bitmap de travail courante
  82. pf_DispOfst        rs.l      1         ; Bitmap affichée
  83. pf_BlitWorkOfst    rs.l      1         ; Bitmap de travail blitter
  84. pf_CpuWorkOfst     rs.l      1         ; Bitmap de travail cpu
  85. pf_Bitmaps         rs.l      3
  86. pf_ClearBuffer     rs.l      1
  87.  
  88. pf_RefreshTbls     rs.l      3
  89. pf_RefreshPtrs     rs.l      3
  90.  
  91. pf_LeftRightFlag   rs.b      1
  92. pf_UpDownFlag      rs.b      1
  93.  
  94. pf_LeftCount       rs.w      1
  95. pf_RightCount      rs.w      1
  96. pf_UpCount         rs.w      1
  97. pf_DownCount       rs.w      1
  98. pf_LBmOffset       rs.l      1
  99. pf_LMapAddr        rs.l      1
  100. pf_LWBmOffset      rs.l      1
  101. pf_LMBmOffset      rs.l      1
  102. pf_RBmOffset       rs.l      1
  103. pf_RMapAddr        rs.l      1
  104. pf_RWBmOffset      rs.l      1
  105. pf_RMBmOffset      rs.l      1
  106. pf_UBmOffset       rs.l      1
  107. pf_UMapAddr        rs.l      1
  108. pf_DBmOffset       rs.l      1
  109. pf_DMapAddr        rs.l      1
  110.  
  111. pf_Size            rs.b      0
  112.  
  113. **** La structure spritesheader permet de définir un ensemble de sprites
  114. **** qui sont affichés sur un certain playfield, mais dont la position
  115. **** peut dépendre d'un playfield différent (Hihihi)
  116. **** Cela permet de squatter le playfield du fond pour afficher des sprites
  117. **** qui seront considérés comme faisant partie de l'avant-plan
  118. **** (comme dans BeastII). Ca permet de piquer des couleurs au plan du fond,
  119. **** qui en a besoin de moins que le plan de devant.
  120.  
  121.          rsreset
  122. SpritesHeader      rs.b      0
  123. sh_First           rs.l      1         ; Pointeur sur le premier sprite
  124. sh_Playfield       rs.l      1         ; Pointeur sur le playfield auquel
  125.                                        ; les positions sont relatives
  126. sh_PosOfst         rs.l      1         ; Offset de la position à mettre
  127.                                        ; à jour
  128. sh_Size            rs.b      0
  129.  
  130. **** Structure de sprite
  131. **** La position est stockée de manière étrange :
  132. **** Il existe deux structures SpritePos, soit deux paires de coordonnées.
  133. **** L'une d'entre elle correspond à la position d'affichage et est
  134. **** bloquée tant que tous les sprites n'ont pas été redessinés.
  135. **** L'autre correspond à la position actuelle du sprite, qui est mise à
  136. **** jour 50 fois par secondes, même si le rafraîchissement dure plus
  137. **** d'une vbl. Lorsque le rafraîchissement est terminé, on échange les
  138. **** deux paires de coordonnées, en inversant le bit 4 de sh_PosOfst.
  139. **** Ce système permet aux sprites de conserver une vitesse de déplacement
  140. **** constante, quelle que soit la fréquence à laquelle ils sont
  141. **** rafraîchis.
  142.  
  143.          rsreset
  144. SpritePos          rs.b      0
  145. spp_X              rs.l      1
  146. spp_Y              rs.l      1
  147. spp_Data           rs.l      1         ; Pointeur sur SpriteData de l'image
  148.                                        ; courante
  149. spp_Padding        rs.l      1
  150. spp_Size           rs.b      0
  151.  
  152.          rsreset
  153. Sprite             rs.b      0
  154. sp_Next            rs.l      1         ; Pointeur sur le sprite suivant
  155. sp_Prev            rs.l      1         ; Pointeur sur le sprite précédent
  156. sp_LastPosOfst     rs.l      1
  157. sp_Pos             rs.b      spp_Size*2
  158. sp_Size            rs.b      0
  159.  
  160.          rsreset
  161. SpriteData         rs.b      0
  162. spd_Bitmap         rs.l      1         ; Pointeur sur la bitmap
  163. spd_Mask           rs.l      1         ; Masque
  164. spd_WWidth         rs.l      1         ; Largeur en mots
  165. spd_Width          rs.l      1         ; Largeur
  166. spd_Height         rs.l      1         ; Hauteur
  167. spd_Hx             rs.l      1         ; Coordonnées du hot point relatives
  168. spd_Hy             rs.l      1         ; au coin supérieur gauche du sprite
  169. spd_Size           rs.b      0
  170.